Window Functions এবং তাদের ব্যবহার

Big Data and Analytics - অ্যাপাচি ইমপালা (Apache Impala) - Impala এর জন্য Data Aggregation এবং Window Functions
180

Apache Impala একটি শক্তিশালী ডেটাবেস ইঞ্জিন যা SQL এর মাধ্যমে ডিস্ট্রিবিউটেড ডেটা প্রসেসিং সম্পাদন করতে সক্ষম। Window Functions Impala তে অত্যন্ত গুরুত্বপূর্ণ, কারণ এগুলো ব্যবহার করে আপনি ডেটার উপর একটি উইন্ডো তৈরি করতে পারেন, যার মধ্যে বিভিন্ন রেকর্ডের উপর নির্ভর করে গণনা (calculation) বা বিশ্লেষণ করা যায়। এগুলো সাধারণত Aggregation Functions (যেমন SUM, AVG, COUNT) এর মতোই কাজ করে, কিন্তু তারা সারির একটির পরিবর্তে পুরো ডেটাসেটের উপর কাজ করে এবং বিভিন্ন সারণির মধ্যে সংযুক্তি বা সম্পর্ক তৈরি করতে সাহায্য করে।


Window Functions এর মৌলিক ধারণা

Window Functions সাধারণত একটি উইন্ডো বা স্লাইডিং উইন্ডো এর মধ্যে গণনা করতে ব্যবহৃত হয়। এখানে একটি উইন্ডো বলতে সাধারণত একাধিক রেকর্ডের একটি গ্রুপ বুঝানো হয়, যা কিছু নির্দিষ্ট শর্তের ভিত্তিতে তৈরি হয়। একটি উইন্ডো তৈরি করার সময় আপনি বিভিন্ন রেকর্ডের উপর ফাংশন প্রয়োগ করতে পারেন, যেমন প্রতিটি রেকর্ডের উপর রানিং টোটাল বা পরবর্তী বা পূর্ববর্তী রেকর্ডের মানের সাথে সম্পর্কিত কোনো গণনা।


Window Functions এর ধরন

Impala তে কয়েকটি গুরুত্বপূর্ণ Window Functions রয়েছে, যা বিভিন্ন ধরনের বিশ্লেষণ বা গণনা করতে ব্যবহৃত হয়। এখানে কিছু সাধারণ এবং জনপ্রিয় Window Functions এর আলোচনা করা হলো:

১. ROW_NUMBER()

ROW_NUMBER() ফাংশন প্রতিটি রেকর্ডের জন্য একটি অনন্য সংখ্যা (row number) প্রদান করে, যা নির্দিষ্ট এক্সপ্রেশনের ভিত্তিতে সাজানো হয়।

উদাহরণ:

SELECT name, salary,
ROW_NUMBER() OVER (ORDER BY salary DESC) AS row_num
FROM employees;

এখানে, salary অনুসারে কর্মচারীদের একটি সজ্জিত তালিকা তৈরি করা হয়েছে, এবং প্রতিটি কর্মচারীকে একটি নির্দিষ্ট row_num দেওয়া হয়েছে।

২. RANK()

RANK() ফাংশনটি প্রতিটি রেকর্ডের জন্য একটি র্যাঙ্ক বা অবস্থান প্রদান করে, তবে যদি দুটি রেকর্ডের মান একে অপরের সমান হয়, তাহলে তাদের জন্য একই র্যাঙ্ক হবে এবং পরবর্তী র্যাঙ্কটি একাধিক বাড়ানো হবে।

উদাহরণ:

SELECT name, salary,
RANK() OVER (ORDER BY salary DESC) AS rank
FROM employees;

এখানে, কর্মচারীদের র্যাঙ্ক দেওয়া হচ্ছে, এবং যদি দুইটি কর্মচারীর salary সমান থাকে, তারা একই র্যাঙ্ক পাবে এবং পরবর্তী র্যাঙ্কে একটি লাফ দেওয়া হবে।

৩. DENSE_RANK()

DENSE_RANK() ফাংশনটি RANK() এর মতো কাজ করে, তবে এটি পরবর্তী র্যাঙ্কে কোনো লাফ দেয় না। অর্থাৎ, যদি দুটি রেকর্ড সমান র্যাঙ্ক পায়, তবে পরবর্তী র্যাঙ্কটি একই ক্রমে থাকে।

উদাহরণ:

SELECT name, salary,
DENSE_RANK() OVER (ORDER BY salary DESC) AS dense_rank
FROM employees;

এখানে, DENSE_RANK() ব্যবহার করা হয়েছে, যার মাধ্যমে salary অনুযায়ী র্যাঙ্ক দেওয়া হবে এবং কোনো লাফ হবে না।

৪. NTILE()

NTILE() ফাংশনটি একটি সংখ্যা প্রদান করে, যা ডেটাকে N ভাগে বিভক্ত করে। এটি বিশেষ করে যখন আপনি ডেটাকে একটি নির্দিষ্ট ভাগে বিভক্ত করতে চান তখন ব্যবহৃত হয়।

উদাহরণ:

SELECT name, salary,
NTILE(4) OVER (ORDER BY salary DESC) AS quartile
FROM employees;

এখানে, কর্মচারীদের salary অনুযায়ী তাদেরকে ৪টি সমান ভাগে বিভক্ত করা হচ্ছে, এবং প্রতিটি কর্মচারীকে একটি quartile দেওয়া হচ্ছে।

৫. LEAD() এবং LAG()

LEAD() এবং LAG() ফাংশন দুটি একই ধরনের কাজ করে, তবে একে অপরের বিপরীত। LEAD() বর্তমান রেকর্ডের পরবর্তী রেকর্ডের মান প্রদান করে এবং LAG() বর্তমান রেকর্ডের পূর্ববর্তী রেকর্ডের মান প্রদান করে।

LEAD() উদাহরণ:

SELECT name, salary,
LEAD(salary, 1) OVER (ORDER BY salary) AS next_salary
FROM employees;

এটি কর্মচারীদের বর্তমান salary এবং পরবর্তী salary প্রদর্শন করবে।

LAG() উদাহরণ:

SELECT name, salary,
LAG(salary, 1) OVER (ORDER BY salary) AS previous_salary
FROM employees;

এটি কর্মচারীদের বর্তমান salary এবং পূর্ববর্তী salary প্রদর্শন করবে।

৬. SUM() / AVG() with Windowing

SUM() এবং AVG() এর মতো অ্যাগ্রিগেট ফাংশনগুলিকে উইন্ডো ফাংশনের সঙ্গে ব্যবহার করলে আপনি চলমান মোট বা গড় হিসাব করতে পারেন, যা রানিং টোটাল বা গড় হিসাবের জন্য অত্যন্ত উপকারী।

উদাহরণ:

SELECT name, salary,
SUM(salary) OVER (ORDER BY salary ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS running_total
FROM employees;

এটি কর্মচারীদের salary এর রানিং টোটাল প্রদান করবে, যেখানে প্রতিটি রেকর্ডের জন্য তার পূর্ববর্তী সমস্ত রেকর্ডের মোট যোগ হবে।


Window Functions এর সুবিধা

  1. অ্যাগ্রিগেশন ছাড়া ডেটার বিশ্লেষণ: Window Functions এর মাধ্যমে আপনি অ্যাগ্রিগেট ফাংশন ছাড়াও ডেটা বিশ্লেষণ করতে পারেন, যেমন রানিং টোটাল, পার্থক্য ইত্যাদি।
  2. কাস্টমাইজড গ্রুপিং: সাধারণ গ্রুপিং বা অ্যাগ্রিগেশন ছাড়াও আপনি কাস্টমাইজড উইন্ডো তৈরি করতে পারেন, যা আপনার প্রয়োজন অনুযায়ী বিশ্লেষণ করবে।
  3. ফাংশন ব্যবহারের সহজতা: SQL-এ সহজভাবে window functions ব্যবহার করে আপনি দ্রুত এবং কার্যকরী বিশ্লেষণ পরিচালনা করতে পারেন।

সারাংশ

Window Functions Impala তে ডেটার মধ্যে বিভিন্ন ধরনের বিশ্লেষণ করতে অত্যন্ত উপকারী। এগুলো বিশেষ করে রানিং টোটাল, র্যাঙ্কিং, বা ডেটার পরবর্তী/পূর্ববর্তী মানের সাথে সম্পর্কিত বিশ্লেষণের জন্য ব্যবহৃত হয়। ROW_NUMBER(), RANK(), LEAD(), LAG() এর মতো ফাংশনগুলো ডেটাকে আরো বিস্তৃতভাবে বিশ্লেষণ করতে সাহায্য করে এবং SUM(), AVG() সহ অন্যান্য অ্যাগ্রিগেট ফাংশনগুলো উইন্ডো ফাংশন হিসেবে ব্যবহার করা যায়, যা ডেটার সাথে আরও কার্যকরী বিশ্লেষণ করতে সহায়ক।

Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...